Leds RGB
1) Seqüencia de colors fixes
Un led RGB és en realitat tres leds que comparteixen el càtode (GND o -) i tenen tres ànodes (+) associats a tres colors bàsics (Red/Roig) , (Green/Verd) i (Blue/Blau). Variant la intensitat amb que brilla cada led aconseguim tots els colors de l'arc de Sant Martí.
Anem a veure-ho amb el següent muntatge.
Podem mirar quina combinació de colors podem crear. Obre el programa Inskscape de Lliurex i dibuixa un cercle a l'eina el·líptica ( fletxa 1), escull l’eina editora de color (fletxa 2), i amb el cercle seleccionat varia la intensitat del Roig (fletxa 3) , del Green/Verd (fletxa 4) i del Blau (fletxa 5).
(Nota: A vora les propietats RGB hi la propietat «A» que és la opacitat que val 255 per tal que el cercle no siga transparent però aquesta propietat no la pot controlar BlocklyDuino, sols inkscape, per això al fer mescles de colors per Arduino la mantindrem a 255 dins de Inkscape).
Si esculls un color Roig pur tindràs un RGB = (255, 0, 0)
Si esculls un color Green/Verd pur tindràs un RGB = (0, 255, 0)
Si esculls un colors Blau pur tindràs un RGB = (0, 0, 255)
Anem a veure com traguem partit a un led RGB amb ESP32. Fes el següent programa i anomena'l LedRGB_Seqüència
int pinRed=19; //GPIO 19
int pinGreen= 21; //GPIO 21
int pinBlack= 22; //GPIO 22
int freq = 5000;
int canal1 = 0;
int canal2 = 1;
int canal3 = 2;
int resolucio = 8;
void setup() {
Serial.begin(115200);
ledcSetup(canal1, freq, resolucio); // configurem la eixida analògica 1
ledcAttachPin(pinRed,canal1); // canal que controlarà el color Roig
ledcSetup(canal2, freq, resolucio); // configurem la eixida analògica 2
ledcAttachPin(pinGreen,canal2); // canal que controlarà el color Verd
ledcSetup(canal3, freq, resolucio); // configurem la eixida analògica 2
ledcAttachPin(pinBlack,canal3); // canal que controlarà el color negre
}
//definim les funcions per als colors
// Pinta de roig el led
void Roig() {
ledcWrite(canal1,255);
ledcWrite(canal2,0);
ledcWrite(canal3,0);
}
// Pinta de blanc el led
void Blanc() {
ledcWrite(canal1,255);
ledcWrite(canal2,255);
ledcWrite(canal3,255);
}
// Pinta de groc el led
void Groc() {
ledcWrite(canal1,255);
ledcWrite(canal2,255);
ledcWrite(canal3,0);
}
// Pinta de verd el led
void Verd() {
ledcWrite(canal1,0);
ledcWrite(canal2,255);
ledcWrite(canal3,0);
}
// Apaga el led
void NegreApagat() {
ledcWrite(canal1,0);
ledcWrite(canal2,0);
ledcWrite(canal3,0);
}
// Pinta de porpra el led
void Porpra() {
ledcWrite(canal1,255);
ledcWrite(canal2,0);
ledcWrite(canal3,255);
}
// Pinta de blau el led
void Blau() {
ledcWrite(canal1,0);
ledcWrite(canal2,0);
ledcWrite(canal3,255);
}
// Pinta de blaucel el led
void BlauCel() {
ledcWrite(canal1,0);
ledcWrite(canal2,255);
ledcWrite(canal3,255);
}
// ara executem el programa principal
// que és una seqüencia de colors
void loop() {
BlauCel();
delay(1000);
Blanc();
delay(1000);
Groc();
delay(1000);
Porpra();
delay(1000);
Roig();
delay(1000);
Verd();
delay(1000);
Blau();
} // final programa principal
No oblides prémer el botó boot al ESP32 i el mantens premut fins que comença a compilar-se
el programa 3 segons més tard de prémer el botó Puja/Transfereix a la targeta, podràs veure
el % de carrega del programa i al final veuràs un missatge al terminal d'Arduino
i el programa s'executarà.
2) Els colors varien de forma continua amb bucles for_next
Amb el mateix muntatge d'abans hem controlat una seqüència de colors fixes però no hem pogut variar de forma continua els colors. Prova el programa següent.
int pols; // Variable que farà variar el pols assignat a cada led RGB
int pinRed=19; //GPIO 19
int pinGreen= 21; //GPIO 21
int pinBlack= 22; //GPIO 22
int freq = 5000;
int canal1 = 0;
int canal2 = 1;
int canal3 = 2;
int resolucio = 8;
//
// Atura el led RGB
void Apagat() {
ledcWrite(canal1,0);
ledcWrite(canal2,0);
ledcWrite(canal3,0);
}
void setup() {
Serial.begin(115200);
ledcSetup(canal1, freq, resolucio); // configurem la eixida analògica 1
ledcAttachPin(pinRed,canal1); // canal que controlarà el pols Roig
ledcSetup(canal2, freq, resolucio); // configurem la eixida analògica 2
ledcAttachPin(pinGreen,canal2); // canal que controlarà el pols Verd
ledcSetup(canal3, freq, resolucio); // configurem la eixida analògica 3
ledcAttachPin(pinBlack,canal3); // canal que controlarà el pols negre
}
void loop() {
for (pols = 0; pols <= 255; pols=pols+1) {
Serial.println("pols Roig");
Serial.println("Variem PWM des de 0 fins 255");
ledcWrite(canal1,pols);
delay(10);
Apagat();
}
delay(1000);
for (pols = 0; pols <= 255; pols=pols+1) {
Serial.println("pols Verd/Green");
Serial.println("Variem PWM des de 0 fins 255");
ledcWrite(canal2,pols);
delay(10);
Apagat();
}
delay(1000);
for (pols = 0; pols <= 255; pols=pols+1) {
Serial.println("pols Blau");
Serial.println("Variem PWM des de 0 fins 255");
ledcWrite(canal3,pols);
delay(10);
Apagat();
}
delay(1000);
} // final de programa
No oblides prémer el botó boot al ESP32 i el mantens premut fins que comença a compilar-se el programa 3 segons més tard de prémer el botó Puja/Transfereix a la targeta, podràs veure el % de carrega del programa i al final veuràs un missatge al terminal d'Arduino i el programa s'executarà.
Llicenciat sota la Llicència Creative Commons Reconeixement CompartirIgual 4.0